aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/app/api/assets/[assetId]
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/app/api/assets/[assetId]')
-rw-r--r--apps/web/app/api/assets/[assetId]/route.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/apps/web/app/api/assets/[assetId]/route.ts b/apps/web/app/api/assets/[assetId]/route.ts
new file mode 100644
index 00000000..6b583e51
--- /dev/null
+++ b/apps/web/app/api/assets/[assetId]/route.ts
@@ -0,0 +1,29 @@
+import { createContextFromRequest } from "@/server/api/client";
+import { and, eq } from "drizzle-orm";
+
+import { db } from "@hoarder/db";
+import { assets } from "@hoarder/db/schema";
+
+export const dynamic = "force-dynamic";
+export async function GET(
+ request: Request,
+ { params }: { params: { assetId: string } },
+) {
+ const ctx = await createContextFromRequest(request);
+ if (!ctx.user) {
+ return Response.json({ error: "Unauthorized" }, { status: 401 });
+ }
+ const asset = await db.query.assets.findFirst({
+ where: and(eq(assets.id, params.assetId), eq(assets.userId, ctx.user.id)),
+ });
+
+ if (!asset) {
+ return Response.json({ error: "Asset not found" }, { status: 404 });
+ }
+ return new Response(asset.blob as string, {
+ status: 200,
+ headers: {
+ "Content-type": asset.contentType,
+ },
+ });
+}